/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sofia.Persistencia.Managers;


import Principal.MainSofia;
import java.util.Iterator;
import java.util.List;
import javax.persistence.Query;
import javax.persistence.EntityExistsException;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.PersistenceUnit;
import javax.persistence.RollbackException;
import sofia.LogicaNegocio.InformeCoordinador;
import sofia.Persistencia.Entidades.EFisioterapeuta;
import sofia.Persistencia.Entidades.EReporteCoordinador;
/**
 *
 * @author crisfalt
 */
public class MReporteCoordinador {

        @PersistenceUnit
        private EntityManagerFactory managerFactory;
        private EntityManager entityManager;

        public MReporteCoordinador() {
                managerFactory = MainSofia.managerFactory;
                entityManager = managerFactory.createEntityManager();
        }

        public void crearReporteCoordinador( final InformeCoordinador informe , final int idLoginJefe ) throws RollbackException, EntityExistsException {
                entityManager.clear();
                EReporteCoordinador entidadReporte = new EReporteCoordinador();
                entidadReporte.setDescripcion( informe.getDescripcion() );
                EFisioterapeuta entidadCoordinador = entityManager.find( EFisioterapeuta.class , idLoginJefe );
                entidadReporte.setLoginCoordinadorId( entidadCoordinador.getIdLoginJefe() );

                //persiste el objeto en la entidad
                EntityTransaction transaccion = entityManager.getTransaction();
                try {
                        transaccion.begin();
                        entityManager.persist( entidadReporte );
                }
                catch (EntityExistsException ex) {
                        throw ex;
                }
                finally {
                        transaccion.commit();
                }
                entityManager.clear();
        }

        public void actualizarReporteCoordinador( final int id , final InformeCoordinador informe , final String idJefe ) {
                entityManager.clear();
                EReporteCoordinador entidadReporte;
                EntityTransaction transaccion = entityManager.getTransaction();
                transaccion.begin();
                entidadReporte = entityManager.find( EReporteCoordinador.class , id );
                transaccion.commit();
                if( informe != null ) {
                        entidadReporte.setDescripcion( informe.getDescripcion() );
                        EFisioterapeuta entidadCoordinador = entityManager.find( EFisioterapeuta.class , idJefe );
                        entidadReporte.setLoginCoordinadorId( entidadCoordinador.getIdLoginJefe() );

                        transaccion.begin();
                        entityManager.merge( entidadReporte );
                        transaccion.commit();
                }
                entityManager.clear();
        }

        public void eliminarReporteCoordinador( final int idReporteCoordinador ) {
                entityManager.clear();
                EReporteCoordinador entidadReporteCoordinador;
                EntityTransaction transaccion = entityManager.getTransaction();
                transaccion.begin();
                entidadReporteCoordinador = entityManager.find( EReporteCoordinador.class , idReporteCoordinador );
                entityManager.remove( entidadReporteCoordinador );
                transaccion.commit();
                entityManager.clear();
        }

        public InformeCoordinador obtenerReporteCoordinador( final int id ) {
                entityManager.clear();
                EReporteCoordinador entidadReporte;
                InformeCoordinador reporte = null;
                EntityTransaction transaccion = entityManager.getTransaction();
                transaccion.begin();
                entidadReporte = entityManager.find( EReporteCoordinador.class , id );
                transaccion.commit();
                if( entidadReporte != null ) {
//                        reporte = new InformeCoordinador();
//                        reporte.setDescripcion( entidadReporte.getDescripcion() );
//                        reporte.setIdLogin( entidadReporte.getLoginCoordinadorId() );
                }
                entityManager.clear();
                return reporte;
        }

        public List obtenerReportesRegistrados() {
                entityManager.clear();
                EntityTransaction transaccion = entityManager.getTransaction();
                transaccion.begin();
                List reportes = null;
                Query query = entityManager.createQuery( "SELECT eReporteCoordinador FROM EReporteCoordinador eReporteCoordinador" );
                reportes = query.getResultList();
                transaccion.commit();
                if( !reportes.isEmpty() ) {
                        System.out.println( "Leyendo " + reportes.size() + " comentarios" );
                        Iterator stIterator = reportes.iterator();
                        while( stIterator.hasNext() ) {
                                EReporteCoordinador entidadReporteCoordinador = (EReporteCoordinador)stIterator.next();
                                System.out.println( "id" + entidadReporteCoordinador.getIdReporte() );
                                System.out.println( "id coordinador" + entidadReporteCoordinador.getLoginCoordinadorId() );
                                System.out.println( "descrpcion " + entidadReporteCoordinador.getDescripcion() );
                        }
                }
                entityManager.clear();
                return reportes;
        }

}
